/*
Ejemplo de la duración y visibilidad de las variables.

*/

#include <stdio.h>
#include <conio.h>

/**********************************************************/
													/*Declaración de las
													variables globales (extern). 
													Deben hacerse fuera de todas 
													las funciones*/
int vuelta;

/*******************************************************/
													/* Declaración de las
													funciones */

int suma(int,int);
int resta (int,int);
int multiplica(int,int);
int divide(int,int);
void muestraresultados(int,int,int,int);

/*******************************************************/

void main()
{
 const totalvueltas=10;
 int numero1,numero2;
 int vsuma,vresta,vmultiplica,vdivide;
													/*Todas las variables
 													  anteriormente declaradas
													  son de tipo "auto". Solamente
													  tienen validez dentro de la
													  función donde han sido
													  definidas (main) */

 clrscr();

 for (vuelta=1;vuelta<=totalvueltas;vuelta++)
 {

  printf("\n");
  printf("\n");
  printf("Vuelta n£mero %i de %i\n\n",vuelta,totalvueltas);
  printf("Indica primer n£mero: ");
  scanf("%i",&numero1);
  printf("Indica segundo n£mero: ");
  scanf("%i",&numero2);

  vsuma=suma(numero1,numero2);
  vresta=resta(numero1,numero2);
  vmultiplica=multiplica(numero1,numero2);
  vdivide=divide(numero1,numero2);

  muestraresultados(vsuma,vresta,vmultiplica,vdivide);

  printf("Pulsa una tecla...");
  getch();
 }
}
/**********************************************************/
int suma(int s1,int s2)
{
 int st;
												/*Las variables s1,s2,st
												son variables "auto". Solamente
												tienen validez dentro de la
												función "suma" */
 static int acumulasumas=0;
												/*La variable "acumulasumas" es
												declarada como "static". Por tanto,
												se inicializará la primera vez que
												se entra en la función, y
												conservará su valor entre las
												distintas ejecuciones de la
												función*/

 st=s1+s2;

												/* Dentro de esta función podemos
												utilizar la variable "vuelta",
												puesto que ésta es una variable
												global (extern)*/

 printf("Funci˘n suma. Seguimos en la vuelta %i.\n",vuelta);

 acumulasumas=acumulasumas+st;
 printf("     El valor de las sumas acumuladas es %i. \n",acumulasumas);

 return(st);
}
/**********************************************************/
int resta (int r1,int r2)
{
 int rt;

												/*Las variables r1,r2,rt
												son variables "auto". Solamente
												tienen validez dentro de la
												función "resta" */
 static int acumularestas=0;
												/*La variable "acumularestas" es
												declarada como "static". Por tanto,
												se inicializará la primera vez que
												se entra en la función, y
												conservará su valor entre las
												distintas ejecuciones de la
												función*/

 rt=r1-r2;

												/* Dentro de esta función podemos
												utilizar la variable "vuelta",
												puesto que ésta es una variable
												global (extern)*/

 printf("Funci˘n resta. Seguimos en la vuelta %i.\n",vuelta);

 acumularestas=acumularestas+rt;
 printf("     El valor de las restas acumuladas es %i. \n",acumularestas);

 return(rt);
}
/**********************************************************/
int multiplica(int m1,int m2)
{
 int mt;
												/*Las variables m1,m2,mt
												son variables "auto". Solamente
												tienen validez dentro de la
												función "multipllica" */

 static int acumulamultiplica=0;
												/*La variable "acumulamultiplica" es
												declarada como "static". Por tanto,
												se inicializará la primera vez que
												se entra en la función, y
												conservará su valor entre las
												distintas ejecuciones de la
												función*/
 mt=m1*m2;

												/* Dentro de esta función podemos
												utilizar la variable "vuelta",
												puesto que ésta es una variable
												global (extern)*/

 printf("Funci˘n multiplica. Seguimos en la vuelta %i.\n",vuelta);

 acumulamultiplica=acumulamultiplica+mt;
 printf("     El valor de las multiplicaciones acumuladas es %i. \n",acumulamultiplica);

 return(mt);

}
/**********************************************************/
int divide(int d1,int d2)
{
 int dt;

												/*Las variables d1,d2,dt
												son variables "auto". Solamente
												tienen validez dentro de la
												función "divide" */
 static int acumuladivide=0;
												/*La variable "acumuladivide" es
												declarada como "static". Por tanto,
												se inicializará la primera vez que
												se entra en la función, y
												conservará su valor entre las
												distintas ejecuciones de la
												función*/

 dt=d1/d2;

												/* Dentro de esta función podemos
												utilizar la variable "vuelta",
												puesto que ésta es una variable
												global (extern)*/

 printf("     Funci˘n divide. Seguimos en la vuelta %i.\n",vuelta);

 acumuladivide=acumuladivide+dt;
 printf("     El valor de las divisiones acumuladas es %i. \n",acumuladivide);
 return(dt);
}
/**********************************************************/
void muestraresultados(int sumares,int restares,int prodres,int divres)
												/* Las cuatro variables anteriores, son
												variables "auto". */

{
 printf("\n\n     La suma es: %i.",sumares);
 printf("\n     La resta es: %i.",restares);
 printf("\n     La multiplicaci˘n es: %i.",prodres);
 printf("\n     La divisi˘n es: %i.\n\n",divres);

}
/**********************************************************/